'''
集合（set）是一个无序的不重复元素序列
无排序
'''

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
example = set([1,4,5,7])   #set构造里是序列，序列有很多种
example_char = set('I LOVE PYTHON')
blank = set() #空集合
print('orange' in basket)                 # 快速判断元素是否在集合内
print(1 in example)
print(len(blank))
print(example_char)

example_b = set([4,5,8,10])
# a-b（a集合中b没有的元素
print(example - example_b)

# a|b 并集
print(example|example_b)

# a&b交集
print(example&example_b)

#  a^b(不同时包含于a和b的元素)
print(example^example_b)
# 推导式写法
a = {x for x in 'abracadabra' if x not in 'abc'}
print(a)


#增加元素
example.add(123)
print(example)
example.update([789,89])
print(example)
example.update([12,13],[14,15])
print(example)

#移除元素
example.remove(789) # 不存在元素会报错的！！！！
example.discard(789)# 删除不会报错
print(example)
print(example.pop()) #随机抽取一个元素  这是因为 集合的无序性≠随机性。集合的顺序由元素的哈希值和插入顺序决定，在相同环境下可能表现出 “固定” 的顺序，尤其是对于简单的不可变对象（如字符串、整数）。
print(example)
#example.clear() #清除



#常用函数
##差集 元素包含在集合 x ，但不在集合 y
example.difference(example_b)
# difference_update() 方法用于移除两个集合中都存在的元素。 不会创建新集合
example.difference_update(example_b)

##交集
example.intersection(example_b) #返回交集 原集合不动
example.intersection_update(example_b)#获取两个或更多集合中都重叠的元素，即计算交集。
##是否存在交集
example.isdisjoint(example_b)

##是否是子集
example.issubset(example_b)

## 是否完全包含
example.issuperset(example_b)

##并集
example.union(example_b)

##两者都单一存在的并集
example.symmetric_difference(example_b)
example.symmetric_difference_update(example_b)#原始集合 x 中移除与 y 集合中的重复元素，并将不重复的元素插入到集合 x 中



